package 设计模式.一单例模式.snippet2;

/**
 * 饿汉式(静态代码块) 线程安全
 *
 * 优缺点说明:
 * 1)这种方式和上面的方式其实类似，只不过将类实例化的过程放在了静态代码块
 * 中，也是在类装载的时候，就执行静态代码块中的代码，初始化类的实例。优
 * 缺点和_上面是一样的。
 * 2)结论:这种单例模式可用，但是可能造成内存浪费
 */
public class SingletonTest02 {
    public static void main(String[] args) {
        //测试
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();

        System.out.printf("instance1与instance2是否相等:%s%n", instance1 == instance2);
        System.out.println(instance1.hashCode());
        System.out.println(instance2.hashCode());
    }
}

//饿汉式(静态代码块) 线程安全
class Singleton {

    //1.私有构造器，外部不能new
    private Singleton() {
    }

    //2.本类内部创建对象实例
    public static Singleton INSTANCE;

    static {//静态代码块中创建单例对象
        INSTANCE = new Singleton();
    }

    //3.对外提供一个共有得静态方法，返回实例对象
    public static Singleton getInstance() {
        return INSTANCE;
    }
}